草庐IT

C++ 指向 vector 的指针

全部标签

c++ - 如何区分重载函数的左值和右值成员函数指针?

我知道我可以这样做来区分右值函数名和左值函数指针:templatevoidtakeFunction(RET_TYPE(&function)(ARGs...)){coutvoidtakeFunction(RET_TYPE(*&function)(ARGs...)){cout而且我希望对成员函数做同样的事情。但是,它似乎没有翻译:structS;voidtakeMemberFunction(void(S::&function)())//errorC2589:'&':illegaltokenonrightsideof'::'{cout为什么?我知道的另一种方法是对常规函数执行此操作:void

c++ - 如何在 C++11 中存储任意方法指针?

我需要一种方法来存储方法指针列表,但我不关心它们属于哪个类。我想到了这一点:structMethodPointer{void*object;void(*method)(void);};然后我可以有一个采用任意方法的函数:templatevoidregister_method(void(T::*method)(void),T*obj){MethodPointerpointer={obj,method);}voiduse_method_pointer(){...MethodPointermp=...//callthemethod(mp.object->*method)();...}这显然无

c++ - 指向类中方法的函数指针数组

我有一个类sayMethodwithmultiplefunctionsforsolvingPDE'swithdifferentmethodssimilartotheadd,subtract,multiply...functionsbelow.类中的另一个函数(本示例中的DoMath)调用这些方法。用户可以更改方法类型(加、减、...),所以我想创建一个方法指针数组(method_pointer),其中通过选择整数“method_type”来选择方法。我有一个C版本,其中所有内容都在一个文件中,而不是一个类的成员,这工作正常;但是,当指针是类的成员时,我得到“Method_pointer

c++ - 排序 vector 上 std::lower_bound 的时间复杂度

我正在研究http://www.cplusplus.com/reference/algorithm/upper_bound/的std::upper_bound我发现这可能会在非随机访问迭代器上以线性时间运行。我需要将其用于排序vector。现在我不知道什么是非随机访问迭代器以及它是否会在排序后的vector上以对数时间运行。谁能帮我解决这个问题。 最佳答案 §23.3.6.1[vector.overview]/p1:Avectorisasequencecontainerthatsupportsrandomaccessiterator

c++ - 如何传递特征矩阵行引用,将其视为 vector ?

我有一个对Vector引用进行操作的函数,例如voidauto_bias(constEigen::VectorXf&v,Eigen:Ref>out){out=...}有时我需要让这个函数在Matrix行上运行。现在,因为默认的内存布局是列优先的,所以我不能只将行指向的数据映射到vector中。那么,如何将行传递给上述函数以便我可以对其进行操作?不太好的解决方案是有一个临时vector,例如VectorXftmpVec=matrix.row(5);auto_bias(otherVector,tmpVec);matrix.row(5)=tmpVec;但是有没有办法直接做呢?

c++ - 没有 "predicate"的对 vector 上的 max_element

我想找到pairs的vector的最大元素。我的标准是:最大元素是一对中第二个值最高的元素。我这样做了:automax_angle=std::max_element(begin(angles),end(angles),[](conststd::pair&left,conststd::pair&right){returnleft.second不写谓词是否可以做到?由于它是标准结构,是否有更简单的配对方法? 最佳答案 不,你不能,因为默认情况下std::pair是按字典顺序比较的,这意味着从左到右逐元素。因此,您的解决方案是您可以拥有的

c++ - 如何从一个 vector 计算坐标系?

如何只给定一个vector来创建坐标系?(左手、右手、本地或不同空间)我正在寻找只给定一个vector的局部坐标系统算法:原因:1)Z可能是表面法线,那么X和Yvector就是切线和副切线vector2)另一个原因是光线追踪:对光源进行采样。给定一个交点,从该点构建局部坐标系,然后追踪光线到光的形状。Vector3Z={0.0f,0.0f,1.0f};//given//fillxandyCreateXHandedCoordinateSystem(Vector3*X,Vector3*Y,constVector3&Z){//implementationgoeshere..//evaluat

c++ - 创建一个字符串如何改变 const char* 指向的值?

我编写了一个函数,它接受一个字符串并返回一个constchar*,其中包含该字符串的编码版本。我调用这个函数,然后创建一个新的字符串。这样做时,我无意中更改了指向我的constchar*的值,我认为这是不可能的。但是,当我不使用我自己的函数,而只是将一个值硬编码到我的constchar数组中时,当我创建一个字符串时该值不会改变。为什么这里有区别,为什么我仍然能够更改constchar数组的值?#include#include#include#include#includeusingnamespacestd;//returns"@username@FIN"constchar*encode

c++ - 如何从 std::vector 的末尾删除几个元素?

假设我有一个std::vector整数:std::vectorv;v包含100个元素,我想删除最后10个元素。我可以想到这个解决方案:v.erase(v.end()-10,v.end());还有更好的吗? 最佳答案 你可以试试这个:v.resize(v.size()-10);但是,您需要根据您的方法对其进行基准测试。我不确定它更好,甚至可能完全相同。您也可以在调整大小之前检查大小:if(v.size()>=10){v.resize(v.size()-10);}编辑:Resize删除vector末尾的元素:http://www.cpl

c++ - 来自 Boost.Spirit 语法的属性:来自 std:vector of boost::variant 的错误

我有一个用于读取棋盘游戏位置描述的工作解析器(国际跳棋,officialgrammar):#include#includenamespacex3=boost::spirit::x3;autoconstcolon=x3::lit(':');autoconstcomma=x3::lit(',');autoconstdash=x3::lit('-');autoconstdot=x3::lit('.');autoconstking=x3::char_('K');autoconstcolor=x3::char_("BW");autoconstnum_sq=x3::int_;autoconstnu